package com.onefish.toolkit.natives.support;

import java.util.Objects;

/**
 * 三方本地方法库复合键（库路径 + 接口类）
 *
 * @author liuyan
 */
public class LibraryKey {
    //  进行hash计算的字段不可变，否则会导致对象存入hash表后无法检索到
    private final String libPath;
    private final Class<?> interfaceClass;

    public LibraryKey(String libPath, Class<?> interfaceClass) {
        this.libPath = libPath;
        this.interfaceClass = interfaceClass;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        LibraryKey that = (LibraryKey) o;
        return Objects.equals(libPath,that.libPath) &&
                Objects.equals(interfaceClass,that.interfaceClass);
    }

    @Override
    public int hashCode() {
        //  自定义hash哈希码生成算法，考虑哈希冲突、哈希分布、性能高低。
        //  31 是奇质数，且 31 * i 可优化为 (i << 5) - i，提升计算速度。
        return 31 * libPath.hashCode() + interfaceClass.hashCode();
    }
}
